const app = getApp();
const tokenManager = require('../../utils/tokenManager');

Page({
  data: {
    studentProfile: null,
    loading: true,
    error: null
  },

  onLoad(options) {
    // 注册页面实例到全局应用
    if (app.registerPageInstance) {
      app.registerPageInstance(this);
    }

    // 获取token
    const token = tokenManager.getAccessToken();
    if (!token) {
      this.setData({
        loading: false,
        error: '请先登录'
      });
      return;
    }

    // 尝试从eventChannel获取学生档案数据
    const eventChannel = this.getOpenerEventChannel();
    if (eventChannel && eventChannel.on) {
      eventChannel.on('acceptStudentProfile', (data) => {
        if (data && data.studentProfile) {
          // 转换数据格式
          const convertedProfile = this.convertProfileData(data.studentProfile);
          this.setData({
            studentProfile: convertedProfile,
            loading: false
          });
          return;
        }
      });
    }

    // 如果没有从eventChannel获取到数据，则从API获取
    this.loadStudentProfile(token);
  },

  onUnload() {
    // 注销页面实例
    if (app.unregisterPageInstance) {
      app.unregisterPageInstance(this);
    }
  },

  // 转换数据格式
  convertProfileData(profile) {
    if (!profile) return profile;
    
    // 转换政治面貌
    const politicalStatusMap = {
      'MASSES': '群众',
      'LEAGUE_MEMBER': '团员',
      'PARTY_MEMBER': '党员',
      'DEMOCRATIC_PARTY': '民主党派',
      'OTHER': '其他'
    };

    // 解析 GPA 排名并转换为字符串
    let gpaRanking = '暂无';
    try {
      if (profile.gpa_ranking) {
        const rankingData = typeof profile.gpa_ranking === 'string' 
          ? JSON.parse(profile.gpa_ranking)
          : profile.gpa_ranking;
        
        // 确保转换为字符串，处理对象类型
        if (typeof rankingData === 'object') {
          gpaRanking = JSON.stringify(rankingData);
        } else {
          gpaRanking = String(rankingData);
        }
      }
    } catch (e) {
      console.error('解析 GPA 排名失败:', e);
    }

    // 解析课程成绩并转换为字符串
    let courseScores = '暂无';
    try {
      if (profile.course_scores) {
        const scoresData = typeof profile.course_scores === 'string'
          ? JSON.parse(profile.course_scores)
          : profile.course_scores;
        
        // 确保转换为字符串，处理对象类型
        if (typeof scoresData === 'object') {
          courseScores = JSON.stringify(scoresData);
        } else {
          courseScores = String(scoresData);
        }
      }
    } catch (e) {
      console.error('解析课程成绩失败:', e);
    }

    // 解析学术成就并转换为字符串
    let academicAchievements = '暂无';
    try {
      if (profile.academic_achievements) {
        const achievementsData = typeof profile.academic_achievements === 'string'
          ? JSON.parse(profile.academic_achievements)
          : profile.academic_achievements;
        
        // 确保转换为字符串，处理对象类型
        if (typeof achievementsData === 'object') {
          academicAchievements = JSON.stringify(achievementsData);
        } else {
          academicAchievements = String(achievementsData);
        }
      }
    } catch (e) {
      console.error('解析学术成就失败:', e);
    }

    // 确保GPA是字符串
    const gpa = profile.gpa ? String(profile.gpa) : '暂无';

    return {
      ...profile,
      political_status: politicalStatusMap[profile.political_status] || profile.political_status,
      gpa: gpa,
      gpa_ranking: gpaRanking,
      course_scores: courseScores,
      academic_achievements: academicAchievements
    };
  },

  // 从API加载学生档案数据
  loadStudentProfile(token) {
    wx.showLoading({
      title: '加载中...',
      mask: true
    });

    // 确保app.api已正确初始化
    if (!app.api) {
      console.error('app.api未初始化，尝试加载api模块');
      app.api = require('../../api/index');
    }

    app.api.user.getStudentProfile(token)
      .then(studentProfile => {
        console.log('获取到的学生档案数据:', studentProfile);
        // 转换数据格式
        const convertedProfile = this.convertProfileData(studentProfile);
        this.setData({
          studentProfile: convertedProfile,
          loading: false
        });
        wx.hideLoading();
      })
      .catch(error => {
        console.error('获取学生档案失败:', error);
        this.setData({
          loading: false,
          error: error.message || '获取学生档案失败'
        });
        wx.hideLoading();
      });
  },

  // 刷新数据
  refreshData() {
    const token = tokenManager.getAccessToken();
    if (token) {
      this.setData({ loading: true, error: null });
      this.loadStudentProfile(token);
    }
  },

  // 输入框变化处理
  handleInputChange(e) {
    const { field } = e.currentTarget.dataset;
    this.setData({
      [`formData.${field}`]: e.detail.value
    });
  },

  // 选择器变化处理
  handlePickerChange(e) {
    const { field } = e.currentTarget.dataset;
    const value = e.detail.value;
    
    // 根据字段处理不同的选择器
    if (field === 'volunteer' || field === 'makeFriends') {
      this.setData({
        [`formData.${field}`]: ['愿意','不愿意'][value]
      });
    } 
    // 其他选择器处理...
  },

  // 导航到推荐页面
  navigateToRecommend() {
    wx.navigateTo({
      url: '/pages/recommend/index'
    });
  },

  // 表单提交
  handleSubmit() {
    // 表单验证
    if (!this.validateForm()) {
      return;
    }
    
    wx.showLoading({
      title: '保存中...',
      mask: true
    });
    
    // 模拟网络请求
    setTimeout(() => {
      wx.hideLoading();
      wx.showToast({
        title: '保存成功',
        icon: 'success',
        duration: 1500,
        success: () => {
          // 跳转到下一步
          setTimeout(() => {
            wx.navigateTo({
              url: '/pages/next-step/index'
            });
          }, 1500);
        }
      });
    }, 2000);
  },

  // 表单验证
  validateForm() {
    const requiredFields = [
      'careerGoal', 'firstIndustry', 
      'expectedSalary', 'workLocation'
    ];
    
    for (const field of requiredFields) {
      if (!this.data.formData[field]) {
        wx.showToast({
          title: `请填写${this.getFieldName(field)}`,
          icon: 'none'
        });
        return false;
      }
    }
    
    return true;
  },

  // 获取字段中文名
  getFieldName(field) {
    const fieldNames = {
      'careerGoal': '职业目标',
      'firstIndustry': '第一意向行业',
      'expectedSalary': '期望薪资范围',
      'workLocation': '期望工作地点'
    };
    return fieldNames[field] || field;
  }
});